<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>01_高阶函数_函数柯里化</title>
    <link rel="shortcut icon" href="../../favicon.ico">
</head>
<body>
<div id="test"></div>

<!--引入react核心库-->
<script src="../js/react.development.js"></script>
<!--引入react-dom，用于支持react操作DOM-->
<script src="../js/react-dom.development.js"></script>
<!--引入babel，用于将jsx转为js-->
<script src="../js/babel.min.js"></script>

<script type="text/babel">
    // 创建组件
    class Login extends React.Component {
        // 初始化状态
        state = {
            username: '',
            password: ''
        }
        /*
            高阶函数：如果一个函数符合下面2个规范中的任何一个，那么该函数就是高阶函数
                1、若A函数，接收的参数是一个函数，那么A就可以称之为高阶函数。
                2、若A函数，调用的返回值依然是一个函数，那么A就可以称之为高阶函数。
                常见的高阶函数：Promise、setTimeout、arr.map()等等
            函数的柯里化：通过函数调用继续返回函数的方式，实现多次接收参数最后统一处理的编码形式。
         */
        // 保持表单数据到状态中
        saveFormData = (dataType) => {
            return (event) => {
                this.setState({[dataType]: event.target.value}, () => {
                })
            };
        }
        handleSubmit = (event) => {
            event.preventDefault();
            const {username, password} = this.state;
            alert(`你输入的用户是：${username},你输入的密码是：${password}`)
        }

        render() {
            return (
                <form onSubmit={this.handleSubmit}>
                    <label>
                        用户名：
                        <input type="text" onChange={this.saveFormData('username')} name="username"/>
                    </label>
                    <label>
                        密码：
                        <input type="password" onChange={this.saveFormData('password')} name="password"/>
                    </label>
                    <button>登录</button>
                </form>
            )
        }
    }

    ReactDOM.render(<Login/>, document.getElementById('test'));
</script>
</body>
</html>